package parse

import (
	"encoding/json"
	"io"
	"net/http"
	"strconv"
	"ubt-aio-service/app/pkg/logger"
)

// Parse 将请求参数转换成结构体
func Parse(r *http.Request, s any) string {
	// 读取请求参数
	if req, err := io.ReadAll(r.Body); err == nil {
		// 将请求参数转换成结构体
		if err = json.Unmarshal(req, &s); err == nil {
			return ValidateStruct(s)
		}
		logger.Error("请求的参数或其格式错误。" + err.Error())
	}
	return "对不起，请求的参数或其格式错误，请重试！"
}

// Str2u8 字符串转UINT8
func Str2u8(src string) uint8 {
	var dst uint8
	if idU64, err := strconv.ParseUint(src, 10, 8); err == nil {
		dst = uint8(idU64)
	} else {
		logger.Error("字符串转数字失败")
	}
	return dst
}

// Str2u32 字符串转UINT32
func Str2u32(src string) uint32 {
	var dst uint32
	if idU64, err := strconv.ParseUint(src, 10, 32); err == nil {
		dst = uint32(idU64)
	} else {
		logger.Error("字符串转数字失败")
	}
	return dst
}

// Str2u64 字符串转UINT64
func Str2u64(src string) uint64 {
	dst, err := strconv.ParseUint(src, 10, 64)
	if err != nil {
		logger.Error("字符串转数字失败")
	}
	return dst
}

// Str2int 字符串转int
func Str2int(src string) int {
	dst, err := strconv.Atoi(src)
	if err != nil {
		logger.Error("字符串转数字失败")
	}
	return dst
}
